package nancal.mp.web.system


import io.swagger.annotations.Api
import io.swagger.annotations.ApiOperation
import nancal.mp.db.mongo.entity.sys.*
import nancal.mp.db.mongo.mor
import nbcp.base.annotation.*
import nbcp.base.annotation.mvc.*
import nbcp.base.comm.ApiResult
import nbcp.base.comm.JsonResult
import nbcp.base.comm.ListResult
import nbcp.base.comm.PagerModel
import nbcp.base.extend.*
import nbcp.base.json.*
import nbcp.base.utils.MyUtil
import nbcp.mvc.sys.*
import nbcp.myoql.db.mongo.deleteById
import nbcp.myoql.db.mongo.query
import nbcp.myoql.db.mongo.queryById
import nbcp.myoql.db.mongo.updateWithEntity

import org.springframework.web.bind.annotation.PostMapping
import org.springframework.web.bind.annotation.RequestMapping
import org.springframework.web.bind.annotation.RestController
import javax.servlet.http.HttpServletRequest

/**
 * Created by CodeGenerator at 2021-04-06 16:42:06
 */
@Api(description = "sso应用配置", tags = arrayOf("SsoConfig"))
@RestController
@RequestMapping("/system/sso-config")
class SsoConfigAutoController {

    @ApiOperation("列表")
    @PostMapping("/list")
    fun list(
        id: String, //当列表列新一条后，刷新时使用
        name: String,
        @org.springframework.web.bind.annotation.RequestBody query: PagerModel<Any?>,
        request: HttpServletRequest
    ): ListResult<SsoConfig> {

        mor.sys.ssoConfig.query()
                .apply {
                    if (id.HasValue) {
                        this.where { it.id mongoEquals id }
                    }
                    if (name.HasValue) {
                        this.where { it.name mongoLike name }
                    }
                }
                .withPager(query)
                .toListResult()
                .apply {
                    return this;
                }
    }

    @ApiOperation("详情")
    @PostMapping("/detail/{id}")
    fun detail(
            @Require id: String,
            request: HttpServletRequest
    ): ApiResult<SsoConfig> {
        mor.sys.ssoConfig.queryById(id)
                .toEntity()
                .apply {
                    if (this == null) {
                        return ApiResult.error<SsoConfig>("找不到数据")
                    }

                    return ApiResult.of(this)
                }
    }

    @ApiOperation("更新")
    @PostMapping("/save")
    fun save(
            @org.springframework.web.bind.annotation.RequestBody entity: SsoConfig,
            request: HttpServletRequest
    ): ApiResult<String> {
        //鉴权
        var userId = request.UserId;

        mor.sys.ssoConfig.updateWithEntity(entity)
                
                .run {
                    if (entity.id.HasValue) {
                        return@run this.execUpdate()
                    } else {

                        entity.secrect = MyUtil.getRandomWithLength(24)

                        return@run this.execInsert()
                    }
                }
                .apply {
                    if (this == 0) {
                        return ApiResult.error("更新失败")
                    }

                    return ApiResult.of(entity.id)
                }
    }

    @ApiOperation("删除")
    @PostMapping("/delete/{id}")
    fun delete(
            @Require id: String,
            request: HttpServletRequest
    ): JsonResult {
        //鉴权
        var userId = request.UserId

        var entity = mor.sys.ssoConfig.queryById(id).toEntity()
        if (entity == null) {
            return JsonResult.error("找不到数据")
        }

        mor.sys.ssoConfig.deleteById(id)
                .exec()
                .apply {
                    if (this == 0) {
                        return JsonResult.error("删除失败")
                    }
                    //实体上配置垃圾箱功能，可物理删除，会自动移到垃圾箱。
                    return JsonResult()
                }
    }
}
